﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//#include<assert.h>
//////
//////若(K−1) 在第一行但不在最后一列，则将 K 填在最后一行，(K−1) 所在列的右一列；
//////若(K−1) 在最后一列但不在第一行，则将 K 填在第一列，(K−1) 所在行的上一行；
//////若(K−1) 在第一行最后一列，则将 K 填在(K−1) 的正下方；
//////若(K−1) 既不在第一行，也不在最后一列，如果(K−1) 的右上方还未填数，则将 K 填在(K−1) 的右上方，否则将 K 填在(K−1) 的正下方。
//////现给定 N ，请按上述方法构造 N×N 的幻方。
//int main()
//{
//	int N = 0;
//	scanf("%d", &N);
//	assert(N % 2 == 1);
//	int arr[39][39] = {0};
//	arr[0][N / 2] = 1;
//	int b = 2;
//	int c = N * N+1;
//	while(c--)
//	{
//		int i = 0;
//		int j = 0;
//		for (i = 0; i < N; i++)
//		{
//			for (j = 0; j < N; j++)
//			{
//				if (arr[i][j] == b - 1 && i == 0 && j != N - 1)
//				{
//					arr[N - 1][j + 1] = b;
//					break;
//				}
//				if (arr[i][j] == b - 1 && j == N - 1 && i != 0)
//				{
//					arr[i - 1][0] = b;
//					break;
//				}
//				if (arr[0][N - 1] == b - 1)
//				{
//					arr[1][N - 1] = b;
//					break;
//				}
//				if (arr[i][j] == b - 1 && i != 0 && j != N - 1)
//				{
//					if (arr[i - 1][j + 1] == 0)
//					{
//						arr[i - 1][j + 1] = b;
//						break;
//					}
//					else
//					{		
//						arr[i + 1][j] = b;
//						break;
//					}
//				}
//			}
//		}
//		b++;
//	}
//	for (int i = 0; i < N; i++)
//	{
//		for (int j = 0; j < N; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//int main()
//{
//    int m = 0;
//    int n = 0;
//    scanf("%d %d\n", &m, &n);
//    int arr[100][ 100] = { 0 };
//    for (int i = 1; i <= m; i++)
//    {
//        for (int j = 1; j <= n; j++)
//        {
//            scanf("%d ", &arr[i][j]);
//        }
//    }
//    int Max = 0;
//    for (int i = 1; i <= m; i++)
//    {
//        for (int j = 1; j <= n; j++)
//        {
//            if (arr[i][j] > arr[i][j - 1])
//                Max = arr[i][j];
//            else
//                Max = arr[i][j - 1];
//        }
//        if (i == m)
//        {
//            printf("%d", Max);
//        }
//    }
//    return 0;
//}


//1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5
//int main()
//{
//	int arr[] = { 1,2,3,4,5,4,3,2,1 };
//	int len = sizeof(arr) / sizeof(arr[0]);
//	printf("%d", arr[len/2]);
//	return 0;
//}


//实现一个函数，可以左旋字符串中的k个字符。
//例如：
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB
//int main()
//{
//	char arr[] = "ABCD";
//	int k = 0;
//	scanf("%d", &k);
//	while (k--)
//	{
//		char c =arr[0];
//		for (int i = 1; i < 4; i++)
//		{
//			arr[i - 1] = arr[i];
//		}
//		arr[3] = c;
//	}
//	printf("%s", arr);
//	return 0;
//}



//模拟实现库函数strlen
//int  my_strlen(char*arr[])
//{
//	int cout = 0;
//	char* a = arr;
//	while ( *a != '\0')
//	{
//		if (*(a + cout) != '\0')
//		{
//			cout++;
//		}
//		else
//			break;
//	}
//	return cout;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	int d = my_strlen("abcdef");
//	printf("%d", d);
//	return 0;
//}




/*写一个函数打印arr数组的内容，不使用数组下标，使用指针。
arr是一个整形一维数组。*/
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,'\0'};
//	int* a = arr;
//	int i = 0;
//	while (*(a+i)!= '\0')
//	{
//		printf("%d ", *(a + i));
//		i++;
//	}
//	return 0;
//}




/*实现一个对整形数组的冒泡排序*/
//int main()
//{
//	int arr1[10] = { 11,91,45,56,34,21,23,19,1,85 };
//	for (int i = 0; i < 9; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 9; j++)
//		{
//			if (arr1[j]>arr1[j+1])
//			{
//				int temp = arr1[j+1];
//				arr1[j + 1] = arr1[j];
//				arr1[j] = temp;
//			}
//		}
//	}
//	for (int i = 0; i < 10; i++)
//		printf("%d ", arr1[i]);
//	return 0;
//}




/*调整数组使奇数全部都位于偶数前面。
题目：输入一个整数数组，实现一个函数，来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分，
所有偶数位于数组的后半部分。*/
//void bowl(int*arr, int cout)
//{
//	int i = 0;
//	for (int i = 0; i < 9; i++)
//	{	
//		int j = 0;
//		for (j = 0; j < 9; j++)
//		{
//			if (*(arr + j) % 2 == 0 && *(arr + j + 1) % 2 == 1)
//			{
//				int temp = *(arr + j + 1);
//				*(arr + j + 1) = *(arr + j);
//				*(arr + j) = temp;
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 12,11,15,16,45,46,78,79,9,69 };
//	int c = sizeof(arr) / sizeof(arr[0]);
//	bowl(arr, c);
//	for (int i = 0; i < 9; i++)
//		printf("%d ", arr[i]);
//	return 0;
//}




/*写一个函数，判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如：给定s1 =AABCD和s2 = BCDAA，返回1
给定s1=abcd和s2=ACBD，返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC*/
//int main()
//{
//	char s1[] = "ABCDA";
//	char arr[] = "BCDAA";
//	int k = 5;
//	while (k--)
//	{
//		char c =arr[0];
//		for (int i = 1; i < 4; i++)
//		{
//			arr[i - 1] = arr[i];
//		}
//		arr[3] = c;
//		int cout = 0;
//		for (int i = 0; i < 5; i++)
//		{
//			if (s1[i] == arr[i])
//				cout++;
//		}
//		if (cout == 5);
//		{
//			printf("是");
//			break;
//		}
//		if(k==0&&cout!=5)
//		{
//			printf("否");
//			break;
//		}
//	}
//	return 0;
//}













